1 Preparations

1.1 Settings

library(dplyr)
library(readr)
library(purrr)
library(knitr)

library(datamodelr)

options(scipen=10, readr.num_columns = 0)
opts_chunk$set(
  #out.width = '\\maxwidth'
  highlight = T
)

1.2 Data Prep

filenames <- c("Cities","Conferences","ConferenceTourneyGames","Events_2010","GameCities","MasseyOrdinals","NCAATourneyCompactResults", "NCAATourneyDetailedResults","NCAATourneySeedRoundSlots", "NCAATourneySeeds", "NCAATourneySlots", "Players_2010","RegularSeasonCompactResults","RegularSeasonDetailedResults","Seasons","SecondaryTourneyCompactResults","SecondaryTourneyTeams","TeamCoaches","TeamConferences","Teams","TeamSpellings")

data <- lapply(filenames, function(x){read_csv(paste0("/mnt/data/mens-machine-learning-competition-2019/",x,".csv"))})
names(data) <- filenames
dm_kaggle <- dm_from_data_frames(data)

1.3 Data Check

map(data, str)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 421 obs. of  3 variables:
##  $ CityID: num  4001 4002 4003 4004 4005 ...
##  $ City  : chr  "Abilene" "Akron" "Albany" "Albuquerque" ...
##  $ State : chr  "TX" "OH" "NY" "NM" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   CityID = col_double(),
##   ..   City = col_character(),
##   ..   State = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 51 obs. of  2 variables:
##  $ ConfAbbrev : chr  "a_sun" "a_ten" "aac" "acc" ...
##  $ Description: chr  "Atlantic Sun Conference" "Atlantic 10 Conference" "American Athletic Conference" "Atlantic Coast Conference" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ConfAbbrev = col_character(),
##   ..   Description = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 4861 obs. of  5 variables:
##  $ Season    : num  2001 2001 2001 2001 2001 ...
##  $ ConfAbbrev: chr  "a_sun" "a_sun" "a_sun" "a_sun" ...
##  $ DayNum    : num  121 121 122 122 122 122 123 123 124 128 ...
##  $ WTeamID   : num  1194 1416 1209 1359 1391 ...
##  $ LTeamID   : num  1144 1240 1194 1239 1273 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   ConfAbbrev = col_character(),
##   ..   DayNum = col_double(),
##   ..   WTeamID = col_double(),
##   ..   LTeamID = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 2502630 obs. of  11 variables:
##  $ EventID       : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Season        : num  2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
##  $ DayNum        : num  7 7 7 7 7 7 7 7 7 7 ...
##  $ WTeamID       : num  1143 1143 1143 1143 1143 ...
##  $ LTeamID       : num  1293 1293 1293 1293 1293 ...
##  $ WPoints       : num  0 0 0 0 0 2 0 0 2 0 ...
##  $ LPoints       : num  0 0 0 0 0 0 0 0 2 0 ...
##  $ ElapsedSeconds: num  0 0 0 10 10 14 36 36 40 56 ...
##  $ EventTeamID   : num  1143 1143 1143 1143 1143 ...
##  $ EventPlayerID : num  600578 600584 600585 600581 600581 ...
##  $ EventType     : chr  "sub_in" "sub_in" "sub_in" "miss2_lay" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   EventID = col_double(),
##   ..   Season = col_double(),
##   ..   DayNum = col_double(),
##   ..   WTeamID = col_double(),
##   ..   LTeamID = col_double(),
##   ..   WPoints = col_double(),
##   ..   LPoints = col_double(),
##   ..   ElapsedSeconds = col_double(),
##   ..   EventTeamID = col_double(),
##   ..   EventPlayerID = col_double(),
##   ..   EventType = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 49235 obs. of  6 variables:
##  $ Season : num  2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
##  $ DayNum : num  7 7 7 7 9 9 9 10 10 11 ...
##  $ WTeamID: num  1143 1314 1326 1393 1143 ...
##  $ LTeamID: num  1293 1198 1108 1107 1178 ...
##  $ CRType : chr  "Regular" "Regular" "Regular" "Regular" ...
##  $ CityID : num  4027 4061 4080 4340 4027 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   DayNum = col_double(),
##   ..   WTeamID = col_double(),
##   ..   LTeamID = col_double(),
##   ..   CRType = col_character(),
##   ..   CityID = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 3492320 obs. of  5 variables:
##  $ Season       : num  2003 2003 2003 2003 2003 ...
##  $ RankingDayNum: num  35 35 35 35 35 35 35 35 35 35 ...
##  $ SystemName   : chr  "SEL" "SEL" "SEL" "SEL" ...
##  $ TeamID       : num  1102 1103 1104 1105 1106 ...
##  $ OrdinalRank  : num  159 229 12 314 260 249 228 204 183 26 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   RankingDayNum = col_double(),
##   ..   SystemName = col_character(),
##   ..   TeamID = col_double(),
##   ..   OrdinalRank = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 2184 obs. of  8 variables:
##  $ Season : num  1985 1985 1985 1985 1985 ...
##  $ DayNum : num  136 136 136 136 136 136 136 136 136 136 ...
##  $ WTeamID: num  1116 1120 1207 1229 1242 ...
##  $ WScore : num  63 59 68 58 49 66 78 59 76 79 ...
##  $ LTeamID: num  1234 1345 1250 1425 1325 ...
##  $ LScore : num  54 58 43 55 38 58 54 58 57 70 ...
##  $ WLoc   : chr  "N" "N" "N" "N" ...
##  $ NumOT  : num  0 0 0 0 0 0 0 0 0 0 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   DayNum = col_double(),
##   ..   WTeamID = col_double(),
##   ..   WScore = col_double(),
##   ..   LTeamID = col_double(),
##   ..   LScore = col_double(),
##   ..   WLoc = col_character(),
##   ..   NumOT = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 1048 obs. of  34 variables:
##  $ Season : num  2003 2003 2003 2003 2003 ...
##  $ DayNum : num  134 136 136 136 136 136 136 136 136 136 ...
##  $ WTeamID: num  1421 1112 1113 1141 1143 ...
##  $ WScore : num  92 80 84 79 76 58 67 74 65 64 ...
##  $ LTeamID: num  1411 1436 1272 1166 1301 ...
##  $ LScore : num  84 51 71 73 74 53 57 69 60 61 ...
##  $ WLoc   : chr  "N" "N" "N" "N" ...
##  $ NumOT  : num  1 0 0 0 1 0 0 0 0 0 ...
##  $ WFGM   : num  32 31 31 29 27 17 19 20 24 28 ...
##  $ WFGA   : num  69 66 59 53 64 52 54 47 56 51 ...
##  $ WFGM3  : num  11 7 6 3 7 4 4 6 5 2 ...
##  $ WFGA3  : num  29 23 14 7 20 14 13 14 14 6 ...
##  $ WFTM   : num  17 11 16 18 15 20 25 28 12 6 ...
##  $ WFTA   : num  26 14 22 25 23 27 31 37 14 11 ...
##  $ WOR    : num  14 11 10 11 18 12 13 8 15 7 ...
##  $ WDR    : num  30 36 27 20 20 29 27 28 23 20 ...
##  $ WAst   : num  17 22 18 15 17 8 4 12 15 13 ...
##  $ WTO    : num  12 16 9 18 13 14 16 12 14 11 ...
##  $ WStl   : num  5 10 7 13 8 3 10 2 11 8 ...
##  $ WBlk   : num  3 7 4 1 2 8 8 2 4 4 ...
##  $ WPF    : num  22 8 19 19 14 16 23 15 14 17 ...
##  $ LFGM   : num  29 20 25 27 25 20 18 26 22 23 ...
##  $ LFGA   : num  67 64 69 60 56 64 54 66 58 56 ...
##  $ LFGM3  : num  12 4 7 7 9 2 3 10 8 6 ...
##  $ LFGA3  : num  31 16 28 17 21 17 11 27 24 17 ...
##  $ LFTM   : num  14 7 14 12 15 11 18 7 8 9 ...
##  $ LFTA   : num  31 7 21 17 20 13 22 10 13 10 ...
##  $ LOR    : num  17 8 20 14 10 15 11 13 17 13 ...
##  $ LDR    : num  28 26 22 17 26 26 24 22 18 19 ...
##  $ LAst   : num  16 12 11 20 16 11 8 13 10 13 ...
##  $ LTO    : num  15 17 12 21 14 11 19 10 14 13 ...
##  $ LStl   : num  5 10 2 6 5 8 5 7 6 6 ...
##  $ LBlk   : num  0 3 5 6 8 4 4 6 5 1 ...
##  $ LPF    : num  22 15 18 21 19 22 19 24 16 15 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   DayNum = col_double(),
##   ..   WTeamID = col_double(),
##   ..   WScore = col_double(),
##   ..   LTeamID = col_double(),
##   ..   LScore = col_double(),
##   ..   WLoc = col_character(),
##   ..   NumOT = col_double(),
##   ..   WFGM = col_double(),
##   ..   WFGA = col_double(),
##   ..   WFGM3 = col_double(),
##   ..   WFGA3 = col_double(),
##   ..   WFTM = col_double(),
##   ..   WFTA = col_double(),
##   ..   WOR = col_double(),
##   ..   WDR = col_double(),
##   ..   WAst = col_double(),
##   ..   WTO = col_double(),
##   ..   WStl = col_double(),
##   ..   WBlk = col_double(),
##   ..   WPF = col_double(),
##   ..   LFGM = col_double(),
##   ..   LFGA = col_double(),
##   ..   LFGM3 = col_double(),
##   ..   LFGA3 = col_double(),
##   ..   LFTM = col_double(),
##   ..   LFTA = col_double(),
##   ..   LOR = col_double(),
##   ..   LDR = col_double(),
##   ..   LAst = col_double(),
##   ..   LTO = col_double(),
##   ..   LStl = col_double(),
##   ..   LBlk = col_double(),
##   ..   LPF = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 720 obs. of  5 variables:
##  $ Seed       : chr  "W01" "W01" "W01" "W01" ...
##  $ GameRound  : num  1 2 3 4 5 6 1 2 3 4 ...
##  $ GameSlot   : chr  "R1W1" "R2W1" "R3W1" "R4W1" ...
##  $ EarlyDayNum: num  136 138 143 145 152 154 136 138 143 145 ...
##  $ LateDayNum : num  137 139 144 146 152 154 137 139 144 146 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Seed = col_character(),
##   ..   GameRound = col_double(),
##   ..   GameSlot = col_character(),
##   ..   EarlyDayNum = col_double(),
##   ..   LateDayNum = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 2218 obs. of  3 variables:
##  $ Season: num  1985 1985 1985 1985 1985 ...
##  $ Seed  : chr  "W01" "W02" "W03" "W04" ...
##  $ TeamID: num  1207 1210 1228 1260 1374 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   Seed = col_character(),
##   ..   TeamID = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 2184 obs. of  4 variables:
##  $ Season    : num  1985 1985 1985 1985 1985 ...
##  $ Slot      : chr  "R1W1" "R1W2" "R1W3" "R1W4" ...
##  $ StrongSeed: chr  "W01" "W02" "W03" "W04" ...
##  $ WeakSeed  : chr  "W16" "W15" "W14" "W13" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   Slot = col_character(),
##   ..   StrongSeed = col_character(),
##   ..   WeakSeed = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 5287 obs. of  4 variables:
##  $ PlayerID  : num  600001 600002 600003 600004 600005 ...
##  $ Season    : num  2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
##  $ TeamID    : num  1102 1102 1102 1102 1102 ...
##  $ PlayerName: chr  "BOHANNON_ZACH" "BRAKEVILLE_ADAM" "BROEKHUIS_TAYLOR" "BROOKS_DEREK" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   PlayerID = col_double(),
##   ..   Season = col_double(),
##   ..   TeamID = col_double(),
##   ..   PlayerName = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 156089 obs. of  8 variables:
##  $ Season : num  1985 1985 1985 1985 1985 ...
##  $ DayNum : num  20 25 25 25 25 25 25 25 25 25 ...
##  $ WTeamID: num  1228 1106 1112 1165 1192 ...
##  $ WScore : num  81 77 63 70 86 79 64 58 98 97 ...
##  $ LTeamID: num  1328 1354 1223 1432 1447 ...
##  $ LScore : num  64 70 56 54 74 78 44 56 80 89 ...
##  $ WLoc   : chr  "N" "H" "H" "H" ...
##  $ NumOT  : num  0 0 0 0 0 0 0 0 0 0 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   DayNum = col_double(),
##   ..   WTeamID = col_double(),
##   ..   WScore = col_double(),
##   ..   LTeamID = col_double(),
##   ..   LScore = col_double(),
##   ..   WLoc = col_character(),
##   ..   NumOT = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 82041 obs. of  34 variables:
##  $ Season : num  2003 2003 2003 2003 2003 ...
##  $ DayNum : num  10 10 11 11 11 11 12 12 12 12 ...
##  $ WTeamID: num  1104 1272 1266 1296 1400 ...
##  $ WScore : num  68 70 73 56 77 81 80 75 71 84 ...
##  $ LTeamID: num  1328 1393 1437 1457 1208 ...
##  $ LScore : num  62 63 61 50 71 55 62 61 66 56 ...
##  $ WLoc   : chr  "N" "N" "N" "N" ...
##  $ NumOT  : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ WFGM   : num  27 26 24 18 30 26 23 28 28 32 ...
##  $ WFGA   : num  58 62 58 38 61 57 55 62 58 67 ...
##  $ WFGM3  : num  3 8 8 3 6 6 2 4 5 5 ...
##  $ WFGA3  : num  14 20 18 9 14 12 8 14 11 17 ...
##  $ WFTM   : num  11 10 17 17 11 23 32 15 10 15 ...
##  $ WFTA   : num  18 19 29 31 13 27 39 21 18 19 ...
##  $ WOR    : num  14 15 17 6 17 12 13 13 9 14 ...
##  $ WDR    : num  24 28 26 19 22 24 18 35 22 22 ...
##  $ WAst   : num  13 16 15 11 12 12 14 19 9 11 ...
##  $ WTO    : num  23 13 10 12 14 9 17 19 17 6 ...
##  $ WStl   : num  7 4 5 14 4 9 11 7 9 12 ...
##  $ WBlk   : num  1 4 2 2 4 3 1 2 2 0 ...
##  $ WPF    : num  22 18 25 18 20 18 25 21 23 13 ...
##  $ LFGM   : num  22 24 22 18 24 20 19 20 24 23 ...
##  $ LFGA   : num  53 67 73 49 62 46 41 59 52 52 ...
##  $ LFGM3  : num  2 6 3 6 6 3 4 4 6 3 ...
##  $ LFGA3  : num  10 24 26 22 16 11 15 17 18 14 ...
##  $ LFTM   : num  16 9 14 8 17 12 20 17 12 7 ...
##  $ LFTA   : num  22 20 23 15 27 17 28 23 27 12 ...
##  $ LOR    : num  10 20 31 17 21 6 9 8 13 9 ...
##  $ LDR    : num  22 25 22 20 15 22 21 25 26 23 ...
##  $ LAst   : num  8 7 9 9 12 8 11 10 13 10 ...
##  $ LTO    : num  18 12 12 19 10 19 30 15 25 18 ...
##  $ LStl   : num  9 8 2 4 7 4 10 14 8 1 ...
##  $ LBlk   : num  2 6 5 3 1 3 4 8 2 3 ...
##  $ LPF    : num  20 16 23 23 14 25 28 18 18 18 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   DayNum = col_double(),
##   ..   WTeamID = col_double(),
##   ..   WScore = col_double(),
##   ..   LTeamID = col_double(),
##   ..   LScore = col_double(),
##   ..   WLoc = col_character(),
##   ..   NumOT = col_double(),
##   ..   WFGM = col_double(),
##   ..   WFGA = col_double(),
##   ..   WFGM3 = col_double(),
##   ..   WFGA3 = col_double(),
##   ..   WFTM = col_double(),
##   ..   WFTA = col_double(),
##   ..   WOR = col_double(),
##   ..   WDR = col_double(),
##   ..   WAst = col_double(),
##   ..   WTO = col_double(),
##   ..   WStl = col_double(),
##   ..   WBlk = col_double(),
##   ..   WPF = col_double(),
##   ..   LFGM = col_double(),
##   ..   LFGA = col_double(),
##   ..   LFGM3 = col_double(),
##   ..   LFGA3 = col_double(),
##   ..   LFTM = col_double(),
##   ..   LFTA = col_double(),
##   ..   LOR = col_double(),
##   ..   LDR = col_double(),
##   ..   LAst = col_double(),
##   ..   LTO = col_double(),
##   ..   LStl = col_double(),
##   ..   LBlk = col_double(),
##   ..   LPF = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 35 obs. of  6 variables:
##  $ Season : num  1985 1986 1987 1988 1989 ...
##  $ DayZero: chr  "10/29/1984" "10/28/1985" "10/27/1986" "11/2/1987" ...
##  $ RegionW: chr  "East" "East" "East" "East" ...
##  $ RegionX: chr  "West" "Midwest" "Southeast" "Midwest" ...
##  $ RegionY: chr  "Midwest" "Southeast" "Midwest" "Southeast" ...
##  $ RegionZ: chr  "Southeast" "West" "West" "West" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   DayZero = col_character(),
##   ..   RegionW = col_character(),
##   ..   RegionX = col_character(),
##   ..   RegionY = col_character(),
##   ..   RegionZ = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 1551 obs. of  9 variables:
##  $ Season          : num  1985 1985 1985 1985 1985 ...
##  $ DayNum          : num  136 136 136 136 136 136 136 136 136 136 ...
##  $ WTeamID         : num  1151 1153 1201 1231 1249 ...
##  $ WScore          : num  67 77 79 79 78 77 77 79 80 59 ...
##  $ LTeamID         : num  1155 1245 1365 1139 1222 ...
##  $ LScore          : num  65 61 76 57 71 75 64 66 67 57 ...
##  $ WLoc            : chr  "H" "H" "H" "H" ...
##  $ NumOT           : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ SecondaryTourney: chr  "NIT" "NIT" "NIT" "NIT" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   DayNum = col_double(),
##   ..   WTeamID = col_double(),
##   ..   WScore = col_double(),
##   ..   LTeamID = col_double(),
##   ..   LScore = col_double(),
##   ..   WLoc = col_character(),
##   ..   NumOT = col_double(),
##   ..   SecondaryTourney = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 1568 obs. of  3 variables:
##  $ Season          : num  1985 1985 1985 1985 1985 ...
##  $ SecondaryTourney: chr  "NIT" "NIT" "NIT" "NIT" ...
##  $ TeamID          : num  1108 1133 1139 1145 1151 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   SecondaryTourney = col_character(),
##   ..   TeamID = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 10994 obs. of  5 variables:
##  $ Season     : num  1985 1985 1985 1985 1985 ...
##  $ TeamID     : num  1102 1103 1104 1106 1108 ...
##  $ FirstDayNum: num  0 0 0 0 0 0 0 0 0 0 ...
##  $ LastDayNum : num  154 154 154 154 154 154 154 154 154 154 ...
##  $ CoachName  : chr  "reggie_minton" "bob_huggins" "wimp_sanderson" "james_oliver" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   TeamID = col_double(),
##   ..   FirstDayNum = col_double(),
##   ..   LastDayNum = col_double(),
##   ..   CoachName = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 11241 obs. of  3 variables:
##  $ Season    : num  1985 1985 1985 1985 1985 ...
##  $ TeamID    : num  1114 1147 1204 1209 1215 ...
##  $ ConfAbbrev: chr  "a_sun" "a_sun" "a_sun" "a_sun" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Season = col_double(),
##   ..   TeamID = col_double(),
##   ..   ConfAbbrev = col_character()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 366 obs. of  4 variables:
##  $ TeamID       : num  1101 1102 1103 1104 1105 ...
##  $ TeamName     : chr  "Abilene Chr" "Air Force" "Akron" "Alabama" ...
##  $ FirstD1Season: num  2014 1985 1985 1985 2000 ...
##  $ LastD1Season : num  2019 2019 2019 2019 2019 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   TeamID = col_double(),
##   ..   TeamName = col_character(),
##   ..   FirstD1Season = col_double(),
##   ..   LastD1Season = col_double()
##   .. )
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 1141 obs. of  2 variables:
##  $ TeamNameSpelling: chr  "a&m-corpus chris" "a&m-corpus christi" "abilene chr" "abilene christian" ...
##  $ TeamID          : num  1394 1394 1101 1101 1101 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   TeamNameSpelling = col_character(),
##   ..   TeamID = col_double()
##   .. )
## $Cities
## NULL
## 
## $Conferences
## NULL
## 
## $ConferenceTourneyGames
## NULL
## 
## $Events_2010
## NULL
## 
## $GameCities
## NULL
## 
## $MasseyOrdinals
## NULL
## 
## $NCAATourneyCompactResults
## NULL
## 
## $NCAATourneyDetailedResults
## NULL
## 
## $NCAATourneySeedRoundSlots
## NULL
## 
## $NCAATourneySeeds
## NULL
## 
## $NCAATourneySlots
## NULL
## 
## $Players_2010
## NULL
## 
## $RegularSeasonCompactResults
## NULL
## 
## $RegularSeasonDetailedResults
## NULL
## 
## $Seasons
## NULL
## 
## $SecondaryTourneyCompactResults
## NULL
## 
## $SecondaryTourneyTeams
## NULL
## 
## $TeamCoaches
## NULL
## 
## $TeamConferences
## NULL
## 
## $Teams
## NULL
## 
## $TeamSpellings
## NULL

2 Schema Card with primary keys

I’m confused… I have no confidence.

dm_kaggle_primary_keys<- dm_add_references(
  dm_kaggle,
  ConferenceTourneyGames$Season == Seasons$Season,
  ConferenceTourneyGames$ConfAbbrev == Conferences$ConfAbbrev,
  Events_2010$Season == Seasons$Season,
  GameCities$CityID == Cities$CityID,
  GameCities$Season == Seasons$Season,
  NCAATourneyCompactResults$Season == Seasons$Season,
  NCAATourneyDetailedResults$Season == Seasons$Season,
  NCAATourneySeedRoundSlots$Seed == NCAATourneySeeds$Seed,
  NCAATourneySeeds$Season == Seasons$Season,
  NCAATourneySeeds$TeamID == Teams$TeamID,
  NCAATourneySlots$Season == Seasons$Season,
  Players_2010$Season == Seasons$Season,
  Players_2010$TeamID == Teams$TeamID,
  RegularSeasonCompactResults$Season == Seasons$Season,
  RegularSeasonDetailedResults$Season == Seasons$Season,
  SecondaryTourneyCompactResults$Season == Seasons$Season,
  MasseyOrdinals$TeamID == Teams$TeamID,
  MasseyOrdinals$Season == Seasons$Season,
  SecondaryTourneyTeams$Season == Seasons$Season,
  SecondaryTourneyTeams$TeamID == Teams$TeamID,
  TeamConferences$ConfAbbrev == Conferences$ConfAbbrev,
  TeamConferences$TeamID == Teams$TeamID,
  TeamConferences$Season == Seasons$Season,
  TeamCoaches$Season == Seasons$Season,
  TeamCoaches$TeamID == Teams$TeamID,
  TeamSpellings$TeamID == Teams$TeamID
)
graph <- dm_create_graph(dm_kaggle_primary_keys, rankdir = "BT", col_attr = c("column", "type"), edge_attrs = "dir = both, arrowtail = crow, arrowhead = odiamond", columnArrows = F)
dm_render_graph(graph)

3 Show Data

out <- NULL
for(i in 1:length(data)) {
  tab_name <- names(data[i])
  message <- paste0("ncol: ", ncol(data[[i]]))

  tab_section <- paste0(
    "\n## ", tab_name, "\n",
    message,"\n",
    "\n\n```{r}\n",
    "knitr::kable(data[[",i,"]] %>% head(10))\n",
    "\n\n```\n\n"
  )

  out <- c(out, knit_expand(text = tab_section))
}

3.1 Cities

ncol: 3

knitr::kable(data[[1]] %>% head(10))
CityID City State
4001 Abilene TX
4002 Akron OH
4003 Albany NY
4004 Albuquerque NM
4005 Allentown PA
4006 Ames IA
4007 Amherst MA
4008 Anaheim CA
4009 Anchorage AK
4010 Ann Arbor MI

3.2 Conferences

ncol: 2

knitr::kable(data[[2]] %>% head(10))
ConfAbbrev Description
a_sun Atlantic Sun Conference
a_ten Atlantic 10 Conference
aac American Athletic Conference
acc Atlantic Coast Conference
aec America East Conference
asc American South Conference
awc American West Conference
big_east Big East Conference
big_eight Big Eight Conference
big_sky Big Sky Conference

3.3 ConferenceTourneyGames

ncol: 5

knitr::kable(data[[3]] %>% head(10))
Season ConfAbbrev DayNum WTeamID LTeamID
2001 a_sun 121 1194 1144
2001 a_sun 121 1416 1240
2001 a_sun 122 1209 1194
2001 a_sun 122 1359 1239
2001 a_sun 122 1391 1273
2001 a_sun 122 1407 1416
2001 a_sun 123 1209 1359
2001 a_sun 123 1407 1391
2001 a_sun 124 1209 1407
2001 a_ten 128 1173 1348

3.4 Events_2010

ncol: 11

knitr::kable(data[[4]] %>% head(10))
EventID Season DayNum WTeamID LTeamID WPoints LPoints ElapsedSeconds EventTeamID EventPlayerID EventType
1 2010 7 1143 1293 0 0 0 1143 600578 sub_in
2 2010 7 1143 1293 0 0 0 1143 600584 sub_in
3 2010 7 1143 1293 0 0 0 1143 600585 sub_in
4 2010 7 1143 1293 0 0 10 1143 600581 miss2_lay
5 2010 7 1143 1293 0 0 10 1143 600581 reb_off
6 2010 7 1143 1293 2 0 14 1143 600581 made2_jump
7 2010 7 1143 1293 0 0 36 1293 602791 miss2_jump
8 2010 7 1143 1293 0 0 36 1293 602781 reb_off
9 2010 7 1143 1293 2 2 40 1293 602781 made2_jump
10 2010 7 1143 1293 0 0 56 1143 600577 assist

3.5 GameCities

ncol: 6

knitr::kable(data[[5]] %>% head(10))
Season DayNum WTeamID LTeamID CRType CityID
2010 7 1143 1293 Regular 4027
2010 7 1314 1198 Regular 4061
2010 7 1326 1108 Regular 4080
2010 7 1393 1107 Regular 4340
2010 9 1143 1178 Regular 4027
2010 9 1314 1300 Regular 4061
2010 9 1393 1352 Regular 4340
2010 10 1301 1209 Regular 4287
2010 10 1326 1241 Regular 4080
2010 11 1111 1423 Regular 4036

3.6 MasseyOrdinals

ncol: 5

knitr::kable(data[[6]] %>% head(10))
Season RankingDayNum SystemName TeamID OrdinalRank
2003 35 SEL 1102 159
2003 35 SEL 1103 229
2003 35 SEL 1104 12
2003 35 SEL 1105 314
2003 35 SEL 1106 260
2003 35 SEL 1107 249
2003 35 SEL 1108 228
2003 35 SEL 1110 204
2003 35 SEL 1111 183
2003 35 SEL 1112 26

3.7 NCAATourneyCompactResults

ncol: 8

knitr::kable(data[[7]] %>% head(10))
Season DayNum WTeamID WScore LTeamID LScore WLoc NumOT
1985 136 1116 63 1234 54 N 0
1985 136 1120 59 1345 58 N 0
1985 136 1207 68 1250 43 N 0
1985 136 1229 58 1425 55 N 0
1985 136 1242 49 1325 38 N 0
1985 136 1246 66 1449 58 N 0
1985 136 1256 78 1338 54 N 0
1985 136 1260 59 1233 58 N 0
1985 136 1314 76 1292 57 N 0
1985 136 1323 79 1333 70 N 0

3.8 NCAATourneyDetailedResults

ncol: 34

knitr::kable(data[[8]] %>% head(10))
Season DayNum WTeamID WScore LTeamID LScore WLoc NumOT WFGM WFGA WFGM3 WFGA3 WFTM WFTA WOR WDR WAst WTO WStl WBlk WPF LFGM LFGA LFGM3 LFGA3 LFTM LFTA LOR LDR LAst LTO LStl LBlk LPF
2003 134 1421 92 1411 84 N 1 32 69 11 29 17 26 14 30 17 12 5 3 22 29 67 12 31 14 31 17 28 16 15 5 0 22
2003 136 1112 80 1436 51 N 0 31 66 7 23 11 14 11 36 22 16 10 7 8 20 64 4 16 7 7 8 26 12 17 10 3 15
2003 136 1113 84 1272 71 N 0 31 59 6 14 16 22 10 27 18 9 7 4 19 25 69 7 28 14 21 20 22 11 12 2 5 18
2003 136 1141 79 1166 73 N 0 29 53 3 7 18 25 11 20 15 18 13 1 19 27 60 7 17 12 17 14 17 20 21 6 6 21
2003 136 1143 76 1301 74 N 1 27 64 7 20 15 23 18 20 17 13 8 2 14 25 56 9 21 15 20 10 26 16 14 5 8 19
2003 136 1163 58 1140 53 N 0 17 52 4 14 20 27 12 29 8 14 3 8 16 20 64 2 17 11 13 15 26 11 11 8 4 22
2003 136 1181 67 1161 57 N 0 19 54 4 13 25 31 13 27 4 16 10 8 23 18 54 3 11 18 22 11 24 8 19 5 4 19
2003 136 1211 74 1153 69 N 0 20 47 6 14 28 37 8 28 12 12 2 2 15 26 66 10 27 7 10 13 22 13 10 7 6 24
2003 136 1228 65 1443 60 N 0 24 56 5 14 12 14 15 23 15 14 11 4 14 22 58 8 24 8 13 17 18 10 14 6 5 16
2003 136 1242 64 1429 61 N 0 28 51 2 6 6 11 7 20 13 11 8 4 17 23 56 6 17 9 10 13 19 13 13 6 1 15

3.9 NCAATourneySeedRoundSlots

ncol: 5

knitr::kable(data[[9]] %>% head(10))
Seed GameRound GameSlot EarlyDayNum LateDayNum
W01 1 R1W1 136 137
W01 2 R2W1 138 139
W01 3 R3W1 143 144
W01 4 R4W1 145 146
W01 5 R5WX 152 152
W01 6 R6CH 154 154
W02 1 R1W2 136 137
W02 2 R2W2 138 139
W02 3 R3W2 143 144
W02 4 R4W1 145 146

3.10 NCAATourneySeeds

ncol: 3

knitr::kable(data[[10]] %>% head(10))
Season Seed TeamID
1985 W01 1207
1985 W02 1210
1985 W03 1228
1985 W04 1260
1985 W05 1374
1985 W06 1208
1985 W07 1393
1985 W08 1396
1985 W09 1439
1985 W10 1177

3.11 NCAATourneySlots

ncol: 4

knitr::kable(data[[11]] %>% head(10))
Season Slot StrongSeed WeakSeed
1985 R1W1 W01 W16
1985 R1W2 W02 W15
1985 R1W3 W03 W14
1985 R1W4 W04 W13
1985 R1W5 W05 W12
1985 R1W6 W06 W11
1985 R1W7 W07 W10
1985 R1W8 W08 W09
1985 R1X1 X01 X16
1985 R1X2 X02 X15

3.12 Players_2010

ncol: 4

knitr::kable(data[[12]] %>% head(10))
PlayerID Season TeamID PlayerName
600001 2010 1102 BOHANNON_ZACH
600002 2010 1102 BRAKEVILLE_ADAM
600003 2010 1102 BROEKHUIS_TAYLOR
600004 2010 1102 BROOKS_DEREK
600005 2010 1102 EL-AMIN_SAJ
600006 2010 1102 FITZGERALD_MIKE
600007 2010 1102 FLETCHER_TODD
600008 2010 1102 FOW_TOM
600009 2010 1102 GREEN_KYLE
600010 2010 1102 HEMPSEY_SHAWN

3.13 RegularSeasonCompactResults

ncol: 8

knitr::kable(data[[13]] %>% head(10))
Season DayNum WTeamID WScore LTeamID LScore WLoc NumOT
1985 20 1228 81 1328 64 N 0
1985 25 1106 77 1354 70 H 0
1985 25 1112 63 1223 56 H 0
1985 25 1165 70 1432 54 H 0
1985 25 1192 86 1447 74 H 0
1985 25 1218 79 1337 78 H 0
1985 25 1228 64 1226 44 N 0
1985 25 1242 58 1268 56 N 0
1985 25 1260 98 1133 80 H 0
1985 25 1305 97 1424 89 H 0

3.14 RegularSeasonDetailedResults

ncol: 34

knitr::kable(data[[14]] %>% head(10))
Season DayNum WTeamID WScore LTeamID LScore WLoc NumOT WFGM WFGA WFGM3 WFGA3 WFTM WFTA WOR WDR WAst WTO WStl WBlk WPF LFGM LFGA LFGM3 LFGA3 LFTM LFTA LOR LDR LAst LTO LStl LBlk LPF
2003 10 1104 68 1328 62 N 0 27 58 3 14 11 18 14 24 13 23 7 1 22 22 53 2 10 16 22 10 22 8 18 9 2 20
2003 10 1272 70 1393 63 N 0 26 62 8 20 10 19 15 28 16 13 4 4 18 24 67 6 24 9 20 20 25 7 12 8 6 16
2003 11 1266 73 1437 61 N 0 24 58 8 18 17 29 17 26 15 10 5 2 25 22 73 3 26 14 23 31 22 9 12 2 5 23
2003 11 1296 56 1457 50 N 0 18 38 3 9 17 31 6 19 11 12 14 2 18 18 49 6 22 8 15 17 20 9 19 4 3 23
2003 11 1400 77 1208 71 N 0 30 61 6 14 11 13 17 22 12 14 4 4 20 24 62 6 16 17 27 21 15 12 10 7 1 14
2003 11 1458 81 1186 55 H 0 26 57 6 12 23 27 12 24 12 9 9 3 18 20 46 3 11 12 17 6 22 8 19 4 3 25
2003 12 1161 80 1236 62 H 0 23 55 2 8 32 39 13 18 14 17 11 1 25 19 41 4 15 20 28 9 21 11 30 10 4 28
2003 12 1186 75 1457 61 N 0 28 62 4 14 15 21 13 35 19 19 7 2 21 20 59 4 17 17 23 8 25 10 15 14 8 18
2003 12 1194 71 1156 66 N 0 28 58 5 11 10 18 9 22 9 17 9 2 23 24 52 6 18 12 27 13 26 13 25 8 2 18
2003 12 1458 84 1296 56 H 0 32 67 5 17 15 19 14 22 11 6 12 0 13 23 52 3 14 7 12 9 23 10 18 1 3 18

3.15 Seasons

ncol: 6

knitr::kable(data[[15]] %>% head(10))
Season DayZero RegionW RegionX RegionY RegionZ
1985 10/29/1984 East West Midwest Southeast
1986 10/28/1985 East Midwest Southeast West
1987 10/27/1986 East Southeast Midwest West
1988 11/2/1987 East Midwest Southeast West
1989 10/31/1988 East West Midwest Southeast
1990 10/30/1989 East Midwest Southeast West
1991 10/29/1990 East Southeast Midwest West
1992 11/4/1991 East West Midwest Southeast
1993 11/2/1992 East Midwest Southeast West
1994 11/1/1993 East Southeast Midwest West

3.16 SecondaryTourneyCompactResults

ncol: 9

knitr::kable(data[[16]] %>% head(10))
Season DayNum WTeamID WScore LTeamID LScore WLoc NumOT SecondaryTourney
1985 136 1151 67 1155 65 H 0 NIT
1985 136 1153 77 1245 61 H 0 NIT
1985 136 1201 79 1365 76 H 0 NIT
1985 136 1231 79 1139 57 H 0 NIT
1985 136 1249 78 1222 71 H 0 NIT
1985 136 1257 77 1108 75 H 0 NIT
1985 136 1266 77 1133 64 H 0 NIT
1985 136 1304 79 1145 66 H 0 NIT
1985 136 1307 80 1401 67 H 0 NIT
1985 136 1350 59 1200 57 H 0 NIT

3.17 SecondaryTourneyTeams

ncol: 3

knitr::kable(data[[17]] %>% head(10))
Season SecondaryTourney TeamID
1985 NIT 1108
1985 NIT 1133
1985 NIT 1139
1985 NIT 1145
1985 NIT 1151
1985 NIT 1153
1985 NIT 1155
1985 NIT 1196
1985 NIT 1200
1985 NIT 1201

3.18 TeamCoaches

ncol: 5

knitr::kable(data[[18]] %>% head(10))
Season TeamID FirstDayNum LastDayNum CoachName
1985 1102 0 154 reggie_minton
1985 1103 0 154 bob_huggins
1985 1104 0 154 wimp_sanderson
1985 1106 0 154 james_oliver
1985 1108 0 154 davey_whitney
1985 1109 0 154 freddie_goss
1985 1110 0 154 ed_tapscott
1985 1111 0 154 kevin_cantwell
1985 1112 0 154 lute_olson
1985 1113 0 154 bob_weinhauer

3.19 TeamConferences

ncol: 3

knitr::kable(data[[19]] %>% head(10))
Season TeamID ConfAbbrev
1985 1114 a_sun
1985 1147 a_sun
1985 1204 a_sun
1985 1209 a_sun
1985 1215 a_sun
1985 1223 a_sun
1985 1273 a_sun
1985 1359 a_sun
1985 1182 a_ten
1985 1203 a_ten

3.20 Teams

ncol: 4

knitr::kable(data[[20]] %>% head(10))
TeamID TeamName FirstD1Season LastD1Season
1101 Abilene Chr 2014 2019
1102 Air Force 1985 2019
1103 Akron 1985 2019
1104 Alabama 1985 2019
1105 Alabama A&M 2000 2019
1106 Alabama St 1985 2019
1107 Albany NY 2000 2019
1108 Alcorn St 1985 2019
1109 Alliant Intl 1985 1991
1110 American Univ 1985 2019

3.21 TeamSpellings

ncol: 2

knitr::kable(data[[21]] %>% head(10))
TeamNameSpelling TeamID
a&m-corpus chris 1394
a&m-corpus christi 1394
abilene chr 1101
abilene christian 1101
abilene-christian 1101
air force 1102
air-force 1102
akron 1103
alabama 1104
alabama a&m 1105
LS0tCnRpdGxlOiAiRGF0YW1vZGVsciBhbmQgU2hvdyBEYXRhIgphdXRob3I6ICJnaW5naTk5IgpkYXRlOiAnYHIgU3lzLnRpbWUoKWAnCm91dHB1dDoKICBybWRmb3JtYXRzOjpodG1sX2NsZWFuOgogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBmaWdfd2lkdGg6IDcKICAgIGZpZ19oZWlnaHQ6IDQuNQogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQprbml0OiAoZnVuY3Rpb24oaW5wdXRGaWxlLCBlbmNvZGluZykgeyAKICAgICAgcm1hcmtkb3duOjpyZW5kZXIoaW5wdXRGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgCiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXIgPSAiLi4vZG9jcy8iKSB9KQotLS0KCiMgUHJlcGFyYXRpb25zIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQoKIyMgU2V0dGluZ3MKCmBgYHtyLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0KbGlicmFyeShkcGx5cikKbGlicmFyeShyZWFkcikKbGlicmFyeShwdXJycikKbGlicmFyeShrbml0cikKCmxpYnJhcnkoZGF0YW1vZGVscikKCm9wdGlvbnMoc2NpcGVuPTEwLCByZWFkci5udW1fY29sdW1ucyA9IDApCm9wdHNfY2h1bmskc2V0KAogICNvdXQud2lkdGggPSAnXFxtYXh3aWR0aCcKICBoaWdobGlnaHQgPSBUCikKYGBgCgojIyBEYXRhIFByZXAKCmBgYHtyfQpmaWxlbmFtZXMgPC0gYygiQ2l0aWVzIiwiQ29uZmVyZW5jZXMiLCJDb25mZXJlbmNlVG91cm5leUdhbWVzIiwiRXZlbnRzXzIwMTAiLCJHYW1lQ2l0aWVzIiwiTWFzc2V5T3JkaW5hbHMiLCJOQ0FBVG91cm5leUNvbXBhY3RSZXN1bHRzIiwgIk5DQUFUb3VybmV5RGV0YWlsZWRSZXN1bHRzIiwiTkNBQVRvdXJuZXlTZWVkUm91bmRTbG90cyIsICJOQ0FBVG91cm5leVNlZWRzIiwgIk5DQUFUb3VybmV5U2xvdHMiLCAiUGxheWVyc18yMDEwIiwiUmVndWxhclNlYXNvbkNvbXBhY3RSZXN1bHRzIiwiUmVndWxhclNlYXNvbkRldGFpbGVkUmVzdWx0cyIsIlNlYXNvbnMiLCJTZWNvbmRhcnlUb3VybmV5Q29tcGFjdFJlc3VsdHMiLCJTZWNvbmRhcnlUb3VybmV5VGVhbXMiLCJUZWFtQ29hY2hlcyIsIlRlYW1Db25mZXJlbmNlcyIsIlRlYW1zIiwiVGVhbVNwZWxsaW5ncyIpCgpkYXRhIDwtIGxhcHBseShmaWxlbmFtZXMsIGZ1bmN0aW9uKHgpe3JlYWRfY3N2KHBhc3RlMCgiL21udC9kYXRhL21lbnMtbWFjaGluZS1sZWFybmluZy1jb21wZXRpdGlvbi0yMDE5LyIseCwiLmNzdiIpKX0pCm5hbWVzKGRhdGEpIDwtIGZpbGVuYW1lcwpkbV9rYWdnbGUgPC0gZG1fZnJvbV9kYXRhX2ZyYW1lcyhkYXRhKQpgYGAKCiMjIERhdGEgQ2hlY2sKCmBgYHtyfQptYXAoZGF0YSwgc3RyKQpgYGAKCiMgU2NoZW1hIENhcmQgd2l0aCBwcmltYXJ5IGtleXMKCioqSSdtIGNvbmZ1c2VkLi4uIEkgaGF2ZSBubyBjb25maWRlbmNlLioqCgpgYGB7ciwgZmlnLndpZHRoPTIwLCBmaWcuaGVpZ2h0PTEwfQpkbV9rYWdnbGVfcHJpbWFyeV9rZXlzPC0gZG1fYWRkX3JlZmVyZW5jZXMoCiAgZG1fa2FnZ2xlLAogIENvbmZlcmVuY2VUb3VybmV5R2FtZXMkU2Vhc29uID09IFNlYXNvbnMkU2Vhc29uLAogIENvbmZlcmVuY2VUb3VybmV5R2FtZXMkQ29uZkFiYnJldiA9PSBDb25mZXJlbmNlcyRDb25mQWJicmV2LAogIEV2ZW50c18yMDEwJFNlYXNvbiA9PSBTZWFzb25zJFNlYXNvbiwKICBHYW1lQ2l0aWVzJENpdHlJRCA9PSBDaXRpZXMkQ2l0eUlELAogIEdhbWVDaXRpZXMkU2Vhc29uID09IFNlYXNvbnMkU2Vhc29uLAogIE5DQUFUb3VybmV5Q29tcGFjdFJlc3VsdHMkU2Vhc29uID09IFNlYXNvbnMkU2Vhc29uLAogIE5DQUFUb3VybmV5RGV0YWlsZWRSZXN1bHRzJFNlYXNvbiA9PSBTZWFzb25zJFNlYXNvbiwKICBOQ0FBVG91cm5leVNlZWRSb3VuZFNsb3RzJFNlZWQgPT0gTkNBQVRvdXJuZXlTZWVkcyRTZWVkLAogIE5DQUFUb3VybmV5U2VlZHMkU2Vhc29uID09IFNlYXNvbnMkU2Vhc29uLAogIE5DQUFUb3VybmV5U2VlZHMkVGVhbUlEID09IFRlYW1zJFRlYW1JRCwKICBOQ0FBVG91cm5leVNsb3RzJFNlYXNvbiA9PSBTZWFzb25zJFNlYXNvbiwKICBQbGF5ZXJzXzIwMTAkU2Vhc29uID09IFNlYXNvbnMkU2Vhc29uLAogIFBsYXllcnNfMjAxMCRUZWFtSUQgPT0gVGVhbXMkVGVhbUlELAogIFJlZ3VsYXJTZWFzb25Db21wYWN0UmVzdWx0cyRTZWFzb24gPT0gU2Vhc29ucyRTZWFzb24sCiAgUmVndWxhclNlYXNvbkRldGFpbGVkUmVzdWx0cyRTZWFzb24gPT0gU2Vhc29ucyRTZWFzb24sCiAgU2Vjb25kYXJ5VG91cm5leUNvbXBhY3RSZXN1bHRzJFNlYXNvbiA9PSBTZWFzb25zJFNlYXNvbiwKICBNYXNzZXlPcmRpbmFscyRUZWFtSUQgPT0gVGVhbXMkVGVhbUlELAogIE1hc3NleU9yZGluYWxzJFNlYXNvbiA9PSBTZWFzb25zJFNlYXNvbiwKICBTZWNvbmRhcnlUb3VybmV5VGVhbXMkU2Vhc29uID09IFNlYXNvbnMkU2Vhc29uLAogIFNlY29uZGFyeVRvdXJuZXlUZWFtcyRUZWFtSUQgPT0gVGVhbXMkVGVhbUlELAogIFRlYW1Db25mZXJlbmNlcyRDb25mQWJicmV2ID09IENvbmZlcmVuY2VzJENvbmZBYmJyZXYsCiAgVGVhbUNvbmZlcmVuY2VzJFRlYW1JRCA9PSBUZWFtcyRUZWFtSUQsCiAgVGVhbUNvbmZlcmVuY2VzJFNlYXNvbiA9PSBTZWFzb25zJFNlYXNvbiwKICBUZWFtQ29hY2hlcyRTZWFzb24gPT0gU2Vhc29ucyRTZWFzb24sCiAgVGVhbUNvYWNoZXMkVGVhbUlEID09IFRlYW1zJFRlYW1JRCwKICBUZWFtU3BlbGxpbmdzJFRlYW1JRCA9PSBUZWFtcyRUZWFtSUQKKQpncmFwaCA8LSBkbV9jcmVhdGVfZ3JhcGgoZG1fa2FnZ2xlX3ByaW1hcnlfa2V5cywgcmFua2RpciA9ICJCVCIsIGNvbF9hdHRyID0gYygiY29sdW1uIiwgInR5cGUiKSwgZWRnZV9hdHRycyA9ICJkaXIgPSBib3RoLCBhcnJvd3RhaWwgPSBjcm93LCBhcnJvd2hlYWQgPSBvZGlhbW9uZCIsIGNvbHVtbkFycm93cyA9IEYpCmRtX3JlbmRlcl9ncmFwaChncmFwaCkKYGBgCgojIFNob3cgRGF0YSB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30KCmBgYHtyfQpvdXQgPC0gTlVMTApmb3IoaSBpbiAxOmxlbmd0aChkYXRhKSkgewogIHRhYl9uYW1lIDwtIG5hbWVzKGRhdGFbaV0pCiAgbWVzc2FnZSA8LSBwYXN0ZTAoIm5jb2w6ICIsIG5jb2woZGF0YVtbaV1dKSkKCiAgdGFiX3NlY3Rpb24gPC0gcGFzdGUwKAogICAgIlxuIyMgIiwgdGFiX25hbWUsICJcbiIsCiAgICBtZXNzYWdlLCJcbiIsCiAgICAiXG5cbmBgYHtyfVxuIiwKICAgICJrbml0cjo6a2FibGUoZGF0YVtbIixpLCJdXSAlPiUgaGVhZCgxMCkpXG4iLAogICAgIlxuXG5gYGBcblxuIgogICkKCiAgb3V0IDwtIGMob3V0LCBrbml0X2V4cGFuZCh0ZXh0ID0gdGFiX3NlY3Rpb24pKQp9CmBgYApgciBwYXN0ZShrbml0KHRleHQgPSBvdXQpLCBjb2xsYXBzZSA9ICdcbicpYA==